<?php

use \think\facade\Config;
use \Firebase\JWT\JWT;
use \Firebase\JWT\SignatureInvalidException;
use \Firebase\JWT\BeforeValidException;
use \Firebase\JWT\ExpiredException;
// 应用公共文件

/**
 * 接口返回格式
 */
function api_json($code=0, $message='', $data){
    exit(json_encode(array(
        'code' => $code,
        'message' => $message,
        'data' => $data,
    )));
}

/**
 * 带统计接口返回格式
 */
function api_json_c($code=0, $message='', $data, $count=0){
    exit(json_encode(array(
        'code' => $code,
        'message' => $message,
        'data' => $data,
        'total' => $count,
    )));
}

/**
 * 生成验签
 */
function signToken($uid){
    $key = Config::get('app_key');
    $token = [
        "iss" => $key, //签发者，可以为空
        "aud"=>'', //面向的用户，可以为空
        "iat"=>'',//签发时间
        "nbf"=>'',//在什么时候jwt生效
        "exp"=>'',//token过期时间
        "data"=>[    //记录用户的信息，有其他信息可以以键值对的形式添加
            "uid"=>$uid
        ],
    ];
    $jwt = JWT::encode($token, $key, 'HS256');
    return $jwt;
}

function checkToken($token){
    $key = Config::get('app_key');
    $status=array("code"=>2);
    try {
        JWT::$leeway = 60;//当前时间减去60，把时间留点余地
        $decoded = JWT::decode($token, $key, array('HS256')); //HS256方式，这里要和签发的时候对应
        $arr = (array)$decoded;
        $res['code']=1;
        $res['data']=$arr['data'];
        return $res;
    } catch(SignatureInvalidException $e) { //签名不正确
        $status['msg']="签名不正确";
        return $status;
    }catch(BeforeValidException $e) { // 签名在某个时间点之后才能用
        $status['msg']="token失效";
        return $status;
    }catch(ExpiredException $e) { // token过期
        $status['msg']="token失效";
        return $status;
    }catch(Exception $e) { //其他错误
        $status['msg']="未知错误";
        return $status;
    }
}
